package com.atguigu.crowd.service.api;

import java.util.List;

import com.atguigu.crowd.entity.vo.DetailProjectVO;
import com.atguigu.crowd.entity.vo.MemberLauchInfoVO;
import com.atguigu.crowd.entity.vo.PortalProjectVO;
import com.atguigu.crowd.entity.vo.PortalTypeVO;
import com.atguigu.crowd.entity.vo.ProjectVO;
import com.atguigu.crowd.entity.vo.TagVO;
import com.atguigu.crowd.entity.vo.TypeVO;
import com.github.pagehelper.PageInfo;

public interface ProjectService {

	/**
	 * 保存项目
	 * @param projectVO
	 * @param memberId
	 */
	void saveProject(ProjectVO projectVO, Integer memberId);

	/**
	 * 查询首页项目，先查询类型，在查询类型下的项目列表
	 * @return
	 */
	List<PortalTypeVO> getPortalTypeVOList();
	/**
	 * 查询项目详情，级联查询图片详情和报文详情
	 * @param projectId
	 * @return
	 */
	DetailProjectVO getDetailProjectVO(Integer projectId);

	/**
	 * 获取发起人信息
	 * @param projectId
	 * @return
	 */
	MemberLauchInfoVO getLaunchInfoVO(Integer projectId);

	/**
	 * 获取我发起的项目
	 * @param memberId
	 * @return
	 */
	List<DetailProjectVO> getLaunchProject(Integer memberId);

	/**
	 * 查询项目分类
	 * @return
	 */
	List<TypeVO> getProjectTypeList();
	/**
	 * 查询项目标签
	 * @return
	 */
	List<TagVO> getProjectTagList();
	
	/**
	 * 查询我发起的项目详情
	 * @param projectId
	 * @return
	 */
	DetailProjectVO getDetailProject(Integer projectId);

	/**
	 * 删除我发起的项目,级联删除项目图片、项目标签、项目分类、项目回报，订单项目
	 * @param projectId
	 */
	void delDetailProject(Integer projectId);

	/**
	 * 更新我发起的项目
	 * @param detailProjectVO
	 */
	void updateDetailProject(DetailProjectVO detailProjectVO,Integer projectId);

	/**
	 * 分页显示项目
	 * @param pageNum
	 * @param pageSize
	 * @param keyword
	 * @return
	 */
	PageInfo<PortalProjectVO> getPageInfo(Integer pageNum, Integer pageSize, String keyword);

	/**
	 * 根据分类id分页查询项目
	 * @param pageNum
	 * @param pageSize
	 * @param keyword
	 * @param typeId
	 * @return
	 */
	PageInfo<PortalProjectVO> getProjectByTypeIdPageInfo(Integer pageNum, Integer pageSize, String keyword,
			Integer typeId);

	/**
	 * 根据状态分页查询项目
	 * @param pageNum
	 * @param pageSize
	 * @param keyword
	 * @param status
	 * @return
	 */
	PageInfo<PortalProjectVO> getProjectByStatusPageInfo(Integer pageNum, Integer pageSize, String keyword,
			Integer status);

	/**
	 * 根据排序条件分页搜索项目
	 * @param pageNum
	 * @param pageSize
	 * @param keyword
	 * @return
	 */
	PageInfo<PortalProjectVO> getProjectOrderByPageInfo(Integer pageNum, Integer pageSize, String keyword,String factor);
}
